package com.cenntro.oss.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.cenntro.common.base.BaseMapper;
import com.cenntro.oss.model.dbo.DevDeviceStaticDO;
import com.cenntro.oss.model.dbo.DeviceListDO;
import com.cenntro.oss.model.qo.DevListQO;
import com.cenntro.oss.model.qo.DeviceCarListMapQO;
import com.cenntro.oss.model.qo.DeviceListQO;
import com.cenntro.oss.model.vo.DeivceDetailsVO;
import com.cenntro.oss.model.vo.DeivceListVO;
import com.cenntro.oss.model.vo.DeviceCarListMapVO;
import com.cenntro.oss.model.vo.VehicleDetailVO;

/**
 * <p>
 * 车辆配置信息，静态数据表 Mapper 接口
 * </p>
 *
 * @author
 * @since 2018-09-13
 */
public interface DevDeviceStaticMapper extends BaseMapper {

    /**
     * 连表查询车辆信息
     * 
     * @param qo
     * @return
     */
    List<DeivceListVO> staticAndOnlineAndCarList(DeviceListQO qo);

    /**
     * 查询详情
     * 
     * @param devId
     * @return
     */
    DeivceDetailsVO devDetail(Integer devId);

    /**
     * 
     * @Title selectListByCarIdAndPlantIdAndBuildTimeAndDevSn 
     * @Description 查询库存车辆 status =1 
     * @param 
     * @return 
     * @throws
     */
    List<VehicleDetailVO> selectListByCarIdAndPlantIdAndBuildTimeAndDevSn(DeviceListQO qo);

    /**
     * 查询关键字段 验证 vincode ，imei， tbox， devSn 是否已经在数据库里存在
     * 
     * @return vincode ，imei， tbox， devSn, index 等字段
     */
    List<Map<String, String>> selectPrimary(Map<String, Object> param);

    /**
     * 
     * @Title 已/未选择的车辆 
     * @Description 库存车辆选择->已/未选择的车辆, status = 1 （库存车辆）
     * @param devSNList 车辆的devSN 
     * @return 
     * @throws
     */
    List<VehicleDetailVO> selectListByUnAllot(DeviceListQO qo);

    /**
     * 批量插入
     * 
     * @param listDevDeviceStaticDO
     */
    void insertBatch(@Param("listDevDeviceStaticDO") List<DevDeviceStaticDO> listDevDeviceStaticDO);

    /**
     * 查询所属机构下是否存在该车辆
     * @param integer
     * @param agentID
     * @return
     */
    DevDeviceStaticDO selectDevOne(@Param("devId") Integer integer, @Param("agentID") Integer agentID);
    
    /**
     * 通过agentid查询列表
     * @param agentPath
     * @param key 车牌号或者车架号
     * @param deviceStatus 
     * @return
     */
    List<DeviceListDO> selectByAgentId(DevListQO qo);
    
    int selectCountByAgentId(DevListQO qo);

    /**
     * 查询供应商下车辆里程之和
     * @param agentPath
     * @return
     */
    Integer selectSumFarawayByAgentPath(String agentPath);

    /**
     * 根据司机查询绑定车辆
     * @param driverId
     * @return
     */
    DevDeviceStaticDO bindDerver(@Param("driverId") Integer driverId);
    
    DevDeviceStaticDO selectByDriverId(@Param("driverId")Integer driverId);

    /**
     * 修改主副驾状态值
     * @param driverId
     * @param state
     */
    void updateDriverState(@Param("devId") Integer devId,@Param("state") Integer state);


    /**
     * 通过车辆状态和path查询车辆总数
     * @param o
     * @return
     */
    Integer selectCountByAgentPathAndDeviceStatus(Object o);
    
    /**
     * 车辆列表（地图筛选）
     * @param o
     * @return
     */
    List<DeviceCarListMapVO> selectCarList(DeviceCarListMapQO qo);

    /**
     * 列表总数
     * @param qo
     * @return
     */
    int countCarList(DeviceCarListMapQO qo);

}
